package controlador;

import Persistencia.PersistenciaUsuario;
import Util.UtilFecha;
import enumeraciones.EnumEstadoUsuario;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.Set;

/**
 *
 * @author JAVA
 */
public class Usuario {
    public enum Sexo {HOMBRE, MUJER};
    // Atributos
    private int idUsuario ; // 
    private String usuario;
    private String contrasenya;
    private String nombre;
    private String apellidos;
    private String email;
    private String poblacion;
    private String provincia;
    private String descripcion;
    private EnumEstadoUsuario tipo;
    private String perfil;
    private String lema;
    private Date fechaNacimiento;
    private Date fechaAlta;
    private Date fechaBaja;
    private String sexo;    
    private Set<Invitacion> invitaciones; // max 20 invitaciones
    private Set<Relacion> relaciones;
    private Set<Mensaje> misMensajes;
    private Set<Mensaje> favoritos;   
   
    
    public Usuario(){}
    
    public Usuario(String nickUsuario, 
                int idUsuario, 
                String nombre,
                String apellidos, 
                String email,
                String poblacion, 
                String provincia,
                String descripcionPersonal,
                String tipoPerfil,
                EnumEstadoUsuario miestado,
                String contrasenya,
                Date fechaalta,
                Date fechabaja, 
                Set invitaciones,
                String lema,
                String sexo,
                Date fechaNacimiento){
        
        this.usuario = nickUsuario;
        this.idUsuario = idUsuario;
        this.nombre = nombre;
        this.apellidos = apellidos;
        this.email = email;
        this.poblacion = poblacion;
        this.provincia = provincia;
        this.descripcion = descripcionPersonal;
        this.perfil = tipoPerfil;
        this.tipo = miestado;
        this.contrasenya = contrasenya;
        this.fechaAlta = fechaalta;
        this.fechaBaja =fechabaja;
        this.invitaciones = invitaciones;
        this.lema = lema;
        this.sexo = sexo;
        this.fechaNacimiento = fechaNacimiento;    
    }


    public Usuario(String usuario,String contrasenya,String nombre,String apellidos,String email,
                   String poblacion,String provincia,  String descripcion,
                   String perfil,Date fechaNacimiento,String sexo){
        
        long fechaIni =  System.currentTimeMillis();//guardamos fecha actual como fecha de alta usuario
        this.usuario = usuario;
        this.contrasenya = contrasenya;
        this.nombre = nombre;
        this.apellidos = apellidos;
        this.email = email;
        this.poblacion = poblacion;
        this.provincia = provincia;
        this.descripcion = descripcion;
        this.tipo = tipo.alta;
        this.perfil = perfil; // Público / privado
        this.fechaNacimiento = fechaNacimiento;
        this.fechaAlta = new Date(fechaIni);
        this.sexo = sexo;
    }
    public Set<Mensaje> getFavoritos() {
        return favoritos;
    }

    public void setFavoritos(Set<Mensaje> favoritos) {
        this.favoritos = favoritos;
    }

    public Set<Invitacion> getInvitaciones() {
        return invitaciones;
    }

    public void setInvitaciones(Set<Invitacion> invitaciones) {
        this.invitaciones = invitaciones;
    }

    public Set<Mensaje> getMisMensajes() {
        return misMensajes;
    }

    public void setMisMensajes(Set<Mensaje> misMensajes) {
        this.misMensajes = misMensajes;
    }

    public Set<Relacion> getRelaciones() {
        return relaciones;
    }

    public void setRelaciones(Set<Relacion> relaciones) {
        this.relaciones = relaciones;
    }

    public String getPerfil() {
        return perfil;
    }

    public String getSexo() {
        return sexo;
    }

    public String getApellidos() {
        return apellidos;
    }

    public String getContrasenya() {
        return contrasenya;
    }

    public String getDescripcion() {
        return descripcion;
    }

    public String getEmail() {
        return email;
    }


    public Date getFechaAlta() {
        return fechaAlta;
    }

    public Date getFechaBaja() {
        return fechaBaja;
    }

    public Date getFechaNacimiento() {
        return fechaNacimiento;
    }

    public int getIdUsuario() {
        return idUsuario;
    }



    public String getLema() {
        return lema;
    }

    public String getNombre() {
        return nombre;
    }

    public String getPoblacion() {
        return poblacion;
    }

    public String getProvincia() {
        return provincia;
    }



    public EnumEstadoUsuario getTipo() {
        return tipo;
    }

    public String getUsuario() {
        return usuario;
    }

    public void setSexo(String Sexo) {
        this.sexo = Sexo;
    }

    public void setPerfil(String perfil) {
        this.perfil = perfil;
    }

    public void setApellidos(String apellidos) {
        this.apellidos = apellidos;
    }

    public void setContrasenya(String contrasenya) {
        this.contrasenya = contrasenya;
    }

    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    public void setEmail(String email) {
        this.email = email;
    }



    public void setFechaAlta(Date fechaAlta) {
        this.fechaAlta = fechaAlta;
    }

    public void setFechaBaja(Date fechaBaja) {
        this.fechaBaja = fechaBaja;
    }

    public void setFechaNacimiento(Date fechaNacimiento) {
        this.fechaNacimiento = fechaNacimiento;
    }

    public void setIdUsuario(int idUsuario) {
        this.idUsuario = idUsuario;
    }



    public void setLema(String lema) {
        this.lema = lema;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public void setPoblacion(String poblacion) {
        this.poblacion = poblacion;
    }

    public void setProvincia(String provincia) {
        this.provincia = provincia;
    }



    public void setTipo(EnumEstadoUsuario tipo) {
        this.tipo = tipo;
    }

    public void setUsuario(String usuario) {
        this.usuario = usuario;
    }
    /*se utiliza para para formatear fecha introducida de formulario*/
    public void setFormatoFechaNacimiento(String fecha){
        this.setFechaNacimiento(UtilFecha.obtenerFecha(fecha));
    }
    
    public static ArrayList<Usuario> getListaAmigos(String nick){
        return Persistencia.PersistenciaUsuario.recuperarUnaListasDeAmigos(nick);
    }
    
    public static Usuario devuelveUsuario(String nick){
        return PersistenciaUsuario.cargaUsuario(nick);
    }
    
    public void setAlta() throws SQLException{
        PersistenciaUsuario.darAltaUsuario(this);
    }
    
    public void setActualiza(){
        PersistenciaUsuario.modificarUsuario(this);
    }
}
